# -*- coding: utf-8 -*-
'''
Created on 25.4.2011

@author: fox
'''
from ui import Ui_Okno
from hw import  Hw
from PyQt4 import QtCore, QtGui
import sys

class Gui(Ui_Okno):
    '''
    Stará se snad o vše
    '''
    hal=Hw()
    Pripojeno=False
    __sloupce=["minus","cas","zastavit","beep"] #pořadí odpovídá pořadí sloupců v tabulce dá se použít pro překlad číslo sloupce > index a zpět

    def __init__(self):


        app = QtGui.QApplication(sys.argv)
        MainWindow = QtGui.QMainWindow()
        MainWindow.setWindowTitle("Stopky")


        self.setupUi(MainWindow)

        # Napojime signal "clicked()" tlacitka PushButton na slot close okna MainWindow
        app.connect(self.Start,QtCore.SIGNAL("clicked()"),self.slotStart)
        app.connect(self.Load_all,QtCore.SIGNAL("clicked()"),self.slotLoad_all)
        app.connect(self.Spojit,QtCore.SIGNAL("clicked()"),self.slotSpojit)
        app.connect(self.Obnovit,QtCore.SIGNAL("clicked()"),self.slotObnovit)
        app.connect(self.Save,QtCore.SIGNAL("clicked()"),self.slotSave)
        app.connect(self.Next,QtCore.SIGNAL("clicked()"),self.slotNext)
        
        #naplnit tabulku:
        p=1
        c=1
        for i in self.hal.programy:
            for n in i:
                #hlavička
                self.Programy.setVerticalHeaderItem (4*(p-1)+(c-1),QtGui.QTableWidgetItem(str(p)+"/"+str(c)))
                #minuty
                self.Hal2Row(4*(p-1)+(c-1))
                
                c+=1
            p+=1
            c=1
        

        MainWindow.show()
        sys.exit(app.exec_())

    def slotStart(self):
        if (self.Pripojeno):
            if (not self.hal.StartStop()):
                self.Err("Nepodařilo se!")
        else:
            self.Err("Startuju ale nechce chytit :-/")
        
        self.update()
    
    def slotLoad_all(self):
        print("Načítám programy")
        fails="" #seznam programů které nevyšly ani na podruhé
        
        for i in range(4*8):
            p=(i/4)+1
            c= (i%4)+1
            self.Load_all.setText(self.__Translate(str(i)+"/"+str(4*8)))
            if (not self.hal.GetProg(p, c)): #nezadařilo se
                print ("Program "+str(p)+"/"+str(c)+" se nepodařilo načíst - zouším znovu")
                if (not self.hal.GetProg(p, c)): #nezadařilo se
                    print ("Program "+str(p)+"/"+str(c)+" se nepodařilo načíst ani na podruhé")
                    fails+=(str(p)+"/"+str(c)+" ")
                    
        self.Hal2Row(i)
                    
        if (fails!=""):
            self.Err("Programy "+fails+" se nepodařilo načíst")
                
        print("hotovo")
        self.Load_all.setText(self.__Translate("Načíst vše"))
    
    def slotSpojit(self):
        port=str(self.Port.text())
        print("Pokuším se připojit na port "+ port)
        if (self.hal.Pripoj(port)):
            print("ok")
            self.Pripojeno=True
            self.update()
        else:
            self.Err("Nepodařilo se připojit na port "+ port)
                        
    def slotObnovit(self):
        print("TODO...")
        self.hal.GetTime()
        self.update()
        
    
    def slotSave(self):
        print("TODO...")

        
    def slotNext(self):
        print("TODO...")
        self.update()
        
    def getTime(self):
        self.hal.GetTime() #aktualizace casu ze stopek - toto delat jednou za cas
        cas=self.hal.Time() # toto je mozne volat porad
           
        
    def update(self):
        '''Nastaví ksychťour do aktuálního stavu podle cache'''
        #start
        if (self.hal.pocita):
            text="Stop"
        else:
            text="Start"
        self.Start.setText(self.__Translate(text))

        #čas:
        T=self.hal.Time()
        self.Minuty.display(T[0])
        self.Sekundy.display(T[1])
        
        #Spojení
        if (self.Pripojeno):
            text="Připojeno"
        else:
            text="Připojit"
        self.Spojit.setText(self.__Translate(text))
       
        
    def __Translate(self,text):
        return QtGui.QApplication.translate("Okno", text, None, QtGui.QApplication.UnicodeUTF8)

    
    def Err(self,text):
        '''Vypíše chybovou zprávu s textem nejdřív do konzole a potom vyhodí msg box'''
        print ("Chybička:"+text)
        QtGui.QMessageBox.critical(self.centralwidget,self.__Translate("Chybička..."),self.__Translate(text))
        
    def Hal2Row(self,n):
        '''Nacpe n-tý řádek z halu do tabulky časů'''

        polidstit={"minus":["Nic","Mínus"],"beep":["Ticho","Pípat"],"zastavit":["Jeď","Stůj"],"smer":["Dolů","Na vrch"]}
        
        data=self.hal.programy[n/4][n%4]
        
        m=str(data['min'])
       
        if (len(m)!=2):
            m="0"+m
        
        s=str(data['sec'])
        if (len(s)!=2):
            s="0"+s
        
        data['cas']=m+":"+s
        
        
        
        c=0
        for i in self.__sloupce:
            if (i!="cas"):
                self.Programy.setItem ( n,c, QtGui.QTableWidgetItem(self.__Translate(polidstit[i][data[i]]) ))
                
            else:
                self.Programy.setItem ( n,c, QtGui.QTableWidgetItem(self.__Translate(data['cas'])))
                
            c+=1
        
        
        
        